/**************************************************************************//**
\file  bspTaskManager.c

\brief Implemenattion of BSP task manager.

\author
    Atmel Corporation: http://www.atmel.com \n
    Support email: avr@atmel.com

  Copyright (c) 2008-2012, Atmel Corporation. All rights reserved.
  Licensed under Atmel's Limited License Agreement (BitCloudTM).

\internal
  History:
    29/05/07 E. Ivanov - Created
******************************************************************************/
/******************************************************************************
                   Includes section
******************************************************************************/
#include <bspTaskManager.h>
#include <atomic.h>

/******************************************************************************
                   Prototypes section
******************************************************************************/
/**************************************************************************//**
\brief BSP tmp175 handler.
******************************************************************************/
void bspTMP175Handler(void);
void bspTemperatureSensorHandler(void);

/**************************************************************************//**
\brief BSP bmp085 handler.
******************************************************************************/
void bspBMP085Handler(void);
void bspPressureSensorHandler(void);

/**************************************************************************//**
\brief BSP hih5031 handler.
******************************************************************************/
void bspHIH5031Handler(void);
void bspHumiditySensorHandler(void);

/**************************************************************************//**
\brief BSP UV handler.
******************************************************************************/
void bspUVHandler(void);
void bspUVSensorHandler(void);

/**************************************************************************//**
\brief BSP UV handler.
******************************************************************************/
void bspPVHandler(void);
void bspPVSensorHandler(void);

/**************************************************************************//**
\brief BSP Wind Direction handler.
******************************************************************************/
void bspWindDirHandler(void);
void bspWindDirSensorHandler(void);

/**************************************************************************//**
\brief BSP Wind Speed handler.
******************************************************************************/
void bspWindSpeedHandler(void);
void bspWindSpeedSensorHandler(void);

/**************************************************************************//**
\brief BSP battery handler.
******************************************************************************/
void bspBatteryHandler(void);
void bspEmptyBatteryHandler(void);

/**************************************************************************//**
\brief BSP adc handler.
******************************************************************************/
void bspAdcHandler(void);
void bspEmptyAdcHandler(void);

/******************************************************************************
                   Global variables section
******************************************************************************/
volatile uint16_t bspTaskFlags = 0;

/******************************************************************************
                   Implementations section
******************************************************************************/
/**************************************************************************//**
\brief BSP task handler.
******************************************************************************/
#if APP_DISABLE_BSP != 1

void BSP_TaskHandler(void)
{
  if (bspTaskFlags & BSP_TEMPERATURE)
  {
    bspTaskFlags &= (~BSP_TEMPERATURE);
    bspTMP175Handler();
  }
  if (bspTaskFlags & BSP_PRESSURE)
  {
    bspTaskFlags &= (~BSP_PRESSURE);
    bspBMP085Handler();
  }
  if (bspTaskFlags & BSP_HUMIDITY)
  {
    bspTaskFlags &= (~BSP_HUMIDITY);
    bspHIH5031Handler();
  }
  if (bspTaskFlags & BSP_UV)
  {
    bspTaskFlags &= (~BSP_UV);
    bspUVHandler();
  }
  if (bspTaskFlags & BSP_PV)
  {
    bspTaskFlags &= (~BSP_PV);
    bspPVHandler();
  }
  if (bspTaskFlags & BSP_WINDDIR)
  {
    bspTaskFlags &= (~BSP_WINDDIR);
    bspWindDirHandler();
  }
/*  if (bspTaskFlags & BSP_WINDSPEED)
  {
    bspTaskFlags &= (~BSP_WINDSPEED);
    bspWindSpeedHandler();
  }*/
/*  if (bspTaskFlags & BSP_BATTERY)
  {
    bspTaskFlags &= (~BSP_BATTERY);
    bspBatteryHandler();
  }*/
  if (bspTaskFlags & BSP_ADC)
  {
    bspTaskFlags &= (~BSP_ADC);
    bspAdcHandler();
  }
  if (bspTaskFlags)
  {
    SYS_PostTask(BSP_TASK_ID);
  }
}

#else  // APP_DISABLE_BSP != 1

void BSP_TaskHandler(void)
{
  if (bspTaskFlags & BSP_TEMPERATURE)
  {
    bspTaskFlags &= (~BSP_TEMPERATURE);
    bspTemperatureSensorHandler();
  }
  if (bspTaskFlags & BSP_PRESSURE)
  {
    bspTaskFlags &= (~BSP_PRESSURE);
    bspPressureSensorHandler();
  }
  if (bspTaskFlags & BSP_HUMIDITY)
  {
    bspTaskFlags &= (~BSP_HUMIDITY);
    bspHumiditySensorHandler();
  }
  if (bspTaskFlags & BSP_UV)
  {
    bspTaskFlags &= (~BSP_UV);
    bspUVSensorHandler();
  }
  if (bspTaskFlags & BSP_PV)
  {
    bspTaskFlags &= (~BSP_PV);
    bspPVSensorHandler();
  }
  if (bspTaskFlags & BSP_WINDDIR)
  {
    bspTaskFlags &= (~BSP_WINDDIR);
    bspWindDirSensorHandler();
  }
  if (bspTaskFlags & BSP_WINDSPEED)
  {
    bspTaskFlags &= (~BSP_WINDSPEED);
    bspWindSpeedSensorHandler();
  }
  if (bspTaskFlags & BSP_BATTERY)
  {
    bspTaskFlags &= (~BSP_BATTERY);
    bspEmptyBatteryHandler();
  }
  if (bspTaskFlags & BSP_ADC)
  {
    bspTaskFlags &= (~BSP_ADC);
    bspEmptyAdcHandler();
  }
  if (bspTaskFlags)
  {
    SYS_PostTask(BSP_TASK_ID);
  }
}

#endif // APP_DISABLE_BSP != 1

// eof bspTaskManager.c
